约 2018 字

约 10 分钟

#发布到 PSGallery

#简介

PowerShell Gallery(PSGallery)是 Microsoft 托管的公共模块仓库。发布到 PSGallery 后,其他用户可以直接通过 Install-Module 安装。发布前需要注册账号、获取 API Key,并准备好带清单的模块目录。

#查看和注册仓库

查看当前仓库,必要时注册默认仓库并设为受信任:

Get-PSRepository
Register-PSRepository -Default
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

#获取 API Key

  1. 登录 PowerShell Gallery。
  2. 进入账户的 API Keys 页面。
  3. 创建一个新的 API Key,并妥善保存。

API Key 只应在发布时使用,不要写入脚本、配置文件或提交到版本控制。可以放在环境变量或密钥管理工具中:

$apiKey = $env:PSGALLERY_API_KEY

#发布模块

Publish-Module 的 -Path 指向包含模块清单的目录:

Publish-Module -Path ./MyModule `
    -NuGetApiKey $apiKey `
    -Repository PSGallery `
    -Verbose

-Path 也可以指向 .psd1 文件。发布时 PowerShellGet 会读取清单中的模块名、版本、作者和依赖信息。

#更新版本

PSGallery 不允许覆盖已发布的同一版本。修改代码后,必须先提升 ModuleVersion 再发布。

版本号建议遵循语义化版本:

  • 1.0.0:首个稳定版本。
  • 1.1.0:新增向后兼容的功能。
  • 1.1.1:修复问题。
  • 2.0.0:包含不兼容变更。

预发布版本通过清单的 PrivateData.PSData.Prerelease 标记:

@{
    ModuleVersion = '1.3.0'
    PrivateData   = @{
        PSData = @{
            Prerelease = 'beta1'
        }
    }
}

#发布前检查

建议至少完成以下检查:

Test-ModuleManifest ./MyModule/MyModule.psd1
Invoke-ScriptAnalyzer -Path ./MyModule -Recurse
Invoke-Pester -Path ./tests

确认无误后,可以给 Publish-Module 加上 -WhatIf 参数预览发布操作。

还应检查:

  • 模块名称在 PSGallery 上是否已被占用。
  • Description、Author、Tags 等元数据是否完整。
  • 是否包含测试文件、临时文件或敏感信息。
  • 依赖模块是否能在目标环境中安装。

#注意事项

  • API Key 等同于发布权限,泄露后应立即在账户中撤销并重新生成。
  • 已发布的版本号不能重复使用,发布前务必确认版本。
  • 发布需要网络连接,首次使用可能提示安装 NuGet 提供程序。
  • 发布前先用 Test-ModuleManifest 和 PSScriptAnalyzer 排除明显问题。
  • 预发布版本在安装时需要显式允许预发布,例如 Install-Module -AllowPrerelease。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2